/*
 * Canvas2Image v0.1
 * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk
 * MIT License [http://www.opensource.org/licenses/mit-license.php]
 */

var Canvas2Image = (function() {

	// check if we have canvas support
	var bHasCanvas = false;
	var oCanvas = document.createElement("canvas");
	if (oCanvas.getContext("2d")) {
		bHasCanvas = true;
	}

	// no canvas, bail out.
	if (!bHasCanvas) {
		return {
			saveAsBMP : function(){}
		}
	}

	var bHasImageData = !!(oCanvas.getContext("2d").getImageData);
	var bHasDataURL = !!(oCanvas.toDataURL);
	var bHasBase64 = !!(window.btoa);
	
	
	//Aquí guardem les dimensions del canvas
	var readCanvasData = function(oCanvas) {
		var iWidth = parseInt(oCanvas.width);
		var iHeight = parseInt(oCanvas.height);
		return oCanvas.getContext("2d").getImageData(0,0,iWidth,iHeight);
	}

	//Funcio on pasarem la informacio a 0 i 1;
	var createBMP = function(oData) {
		//Cadena donde guardaremos el contenido de la imagen en binario.
		var cad = "";
		//En este bucle se cogen los datos del tercer canal de bmp: el canal azul.Y por cada pixel, si no tiene 			          contenido se guarda un 0 y si sí un 1. 
		//El oData es la información lineal de la imagen con los cuatro canales RGB y alpha.
		//r-g-b-a
		for (var o=2; o<oData.data.length; o+=4){
				if (oData.data[o]==0){ cad+="0"; 
				}else{ cad+="1";//alert("1");
				}
		}
		 	
		return cad;
	}


	return {
		saveAsBMP : function(oCanvas, bReturnImg, iWidth, iHeight) {
			if (!(bHasImageData && bHasBase64)) {
				return false;
			}

			var oData = readCanvasData(oCanvas);
			var strImgData = createBMP(oData); //cadena
			return strImgData;
		}
	};

})();